import uvicorn
import logging
from fastapi import FastAPI
from app.api.routes import router
from app.core.db_engine import init_db
import asyncio

# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

# 创建FastAPI应用
def create_app():
    app = FastAPI(title="RAG Text2SQL评估系统", version="1.0.0")
    
    # 注册路由
    app.include_router(router)
    
    # 添加根路径响应
    @app.get("/")
    async def root():
        return {
            "service": "RAG Text2SQL评估系统",
            "version": "1.0.0",
            "endpoints": [
                "/text2sql",
                "/evaluate",
                "/documents",
                "/q2sql-pairs",
                "/health"
            ]
        }
    
    return app

# 启动应用和初始化数据库
async def main():
    try:
        logger.info("正在启动RAG Text2SQL评估系统...")
        
        # 先初始化数据库
        logger.info("正在初始化数据库...")
        await init_db()
        logger.info("数据库初始化完成")
        
        # 然后启动FastAPI服务
        logger.info("数据库初始化成功，准备启动FastAPI服务...")
        app = create_app()
        
        # 使用uvicorn运行应用（注意：在实际生产环境中，应使用命令行启动）
        # 这里为了演示，我们只记录日志，不实际运行服务器
        logger.info("FastAPI服务已创建完成，您可以使用以下命令启动服务：")
        logger.info("uvicorn app.main:app --reload --port 8000")
        
    except Exception as e:
        logger.error(f"服务启动失败: {str(e)}")
        raise

if __name__ == "__main__":
    try:
        # 运行主函数
        asyncio.run(main())
    except KeyboardInterrupt:
        logger.info("服务已停止")
    except Exception as e:
        logger.error(f"应用运行时出错: {str(e)}")